package com.zdb.n1.service;

import com.zdb.n1.entity.User;
import com.zdb.n1.payload.request.AdminCreateUserRequest;
import com.zdb.n1.payload.request.AdminUpdateUserRequest;
import com.zdb.n1.payload.request.LoginRequest;
import com.zdb.n1.payload.request.RegisterRequest;
import com.zdb.n1.payload.request.UpdateUserRequest;
import com.zdb.n1.payload.response.JwtResponse;
import com.zdb.n1.payload.response.MessageResponse;
import com.zdb.n1.payload.response.UserResponse;

import java.util.List;

public interface UserService {

    JwtResponse authenticateUser(LoginRequest loginRequest);

    MessageResponse registerUser(RegisterRequest registerRequest);

    User getCurrentUser();

    UserResponse getUserProfile(Long userId);

    UserResponse updateUserProfile(UpdateUserRequest updateUserRequest);

    MessageResponse changePassword(String currentPassword, String newPassword);

    List<UserResponse> getAllUsers();

    MessageResponse deleteUser(Long userId);

    UserResponse adminUpdateUser(Long userId, AdminUpdateUserRequest adminUpdateUserRequest);
    
    UserResponse adminCreateUser(AdminCreateUserRequest request);
    
    User getUserById(Long id);
}